package io.renren.config;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.renren.modules.sys.entity.ExcelVo;
import io.renren.modules.sys.entity.SignInLogEntity;
import io.renren.modules.sys.service.SignInLogService;
import io.renren.modules.sys.service.SysUserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.io.File;
import java.time.LocalDateTime;


@Slf4j
@Component
public class VisitLogTask {


    @Autowired
    private SignInLogService signInLogService;

    @Autowired
    private SysUserService sysUserService;


    @Value("${file.path}")
    private String filePath;

    /**
     * 一小时一次
     */
    @Scheduled(cron = "0 0 */1 * * ? ")
//    @Scheduled(cron = "0 */1 * * * ? ")
    public void executeVisitLog() {

        log.info("执行导入 时间:" + LocalDateTime.now().toString() + " --- 文件路径:" + filePath);

        // 文件根目录 !
        File file = new File(filePath);

        importFileUser(file);

    }

    /**
     * 早上8:05 执行
     */

    @Scheduled(cron = "0 5 8 * * ?")
    public void executeVisitLogMorning() {

        log.info("执行导入 时间:" + LocalDateTime.now().toString() + " --- 文件路径:" + filePath);

        QueryWrapper<SignInLogEntity> wrapper = new QueryWrapper<>();
        wrapper.gt("id" , 0);

//        signInLogService.remove(wrapper);

        // 文件根目录 !
        File file = new File(filePath);

        importSignInFile(file);

    }


    /**
     * 下午13:05 执行
     */
    @Scheduled(cron = "0 5 13 * * ?")
    public void executeVisitLogNoon() {

        log.info("执行导入 时间:" + LocalDateTime.now().toString() + " --- 文件路径:" + filePath);

        // 文件根目录 !
        File file = new File(filePath);

        importSignInFile(file);

    }


    /**
     * 下午17:05 执行
     */
    @Scheduled(cron = "0 5 17 * * ?")
    public void executeVisitLogAfternoon() {

        log.info("执行导入 时间:" + LocalDateTime.now().toString() + " --- 文件路径:" + filePath);

        // 文件根目录 !
        File file = new File(filePath);

        importSignInFile(file);

    }

    public void importSignInFile(File file) {
        //判断文件不为null或文件目录存在
        if (file == null || !file.exists()){
            log.error("导入失败,请检查文件路径是否正确");
            return;
        }

        File[] files = file.listFiles();

        for (File f: files){

            if (f.isDirectory()){
                importSignInFile(f);
            }else {

                ExcelVo excelVo = new ExcelVo();
                /** 文件路径 **/
                excelVo.setPath(f.getPath());
                /** 起始行 **/
                excelVo.setStartLine(1);
                /** 最大行 **/
                excelVo.setMaxCount(10000);
                log.info("导入文件名 : " + f.getPath());

                boolean importReturnBoolean = false;

                /** 判断如果是 人员表 走一套逻辑  **/
                if (f.getPath().contains("幼儿园人员表")) {
                    importReturnBoolean = false;
                } else {
                    importReturnBoolean = signInLogService.manualImportReturnBoolean(excelVo);
                }


                if (importReturnBoolean) {
                    log.info("导入文件名 : " + f.getPath() + "成功");
                    f.delete();
                }
            }
        }
    }

    /**
     * 递归导入文件
     * @param file
     */
    public void importFileUser(File file ){

        //判断文件不为null或文件目录存在
        if (file == null || !file.exists()){
            log.error("导入失败,请检查文件路径是否正确");
            return;
        }

        File[] files = file.listFiles();

        for (File f: files){

            if (f.isDirectory()){
                importFileUser(f);
            }else {

                ExcelVo excelVo = new ExcelVo();
                /** 文件路径 **/
                excelVo.setPath(f.getPath());
                /** 起始行 **/
                excelVo.setStartLine(1);
                /** 最大行 **/
                excelVo.setMaxCount(10000);
                log.info("导入文件名 : " + f.getPath());

                boolean importReturnBoolean = false;

                /** 判断如果是 人员表 走一套逻辑  **/
                if (f.getPath().contains("幼儿园人员表")) {
                    importReturnBoolean = sysUserService.manualImportReturnBoolean(excelVo);
                }


                if (importReturnBoolean) {
                    log.info("导入文件名 : " + f.getPath() + "成功");
                    f.delete();
                }
            }
        }
    }


    /**
     * 递归导入文件
     * @param file
     */
    public void importFile(File file ){

        //判断文件不为null或文件目录存在
        if (file == null || !file.exists()){
            log.error("导入失败,请检查文件路径是否正确");
            return;
        }

        File[] files = file.listFiles();

        for (File f: files){

            if (f.isDirectory()){
                importFile(f);
            }else {

                ExcelVo excelVo = new ExcelVo();
                /** 文件路径 **/
                excelVo.setPath(f.getPath());
                /** 起始行 **/
                excelVo.setStartLine(1);
                /** 最大行 **/
                excelVo.setMaxCount(10000);
                log.info("导入文件名 : " + f.getPath());

                boolean importReturnBoolean = false;

                /** 判断如果是 人员表 走一套逻辑  **/
                if (f.getPath().contains("幼儿园人员表")) {
                    importReturnBoolean = sysUserService.manualImportReturnBoolean(excelVo);
                } else {
                    importReturnBoolean = signInLogService.manualImportReturnBoolean(excelVo);
                }


                if (importReturnBoolean) {
                    log.info("导入文件名 : " + f.getPath() + "成功");
                    f.delete();
                }
            }
        }
    }



}
